public class PrimeNumbers {
    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        int count = 0;
        
        // 2是最小的素数，单独处理
        System.out.printf("%-6d", 2);
        count++;
        
        // 只检查奇数（偶数除了2都不是素数）
        for (int i = 3; i <= 20000; i += 2) {
            if (isPrime(i)) {
                System.out.printf("%-6d", i);
                count++;
                if (count % 5 == 0) { // 每行输出5个
                    System.out.println();
                }
            }
        }
        
        long endTime = System.currentTimeMillis();
        System.out.println("\n总耗时：" + (endTime - startTime) + "毫秒");
        System.out.println("素数总数：" + count);
    }
    
    // 判断素数的方法（优化前）
    private static boolean isPrime(int n) {
        if (n <= 1) return false;
        // 优化1：只检查到√n（大于√n的因子会与小于√n的因子成对出现）
        for (int i = 3; i <= Math.sqrt(n); i += 2) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
}
